package org.aplombh.java.awcing.basic.graph.bipartiteGraph;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 给定一个 n 个点 m 条边的无向图，图中可能存在重边和自环。
 * <p>
 * 请你判断这个图是否是二分图。
 * <p>
 * 输入格式
 * 第一行包含两个整数 n 和 m。
 * <p>
 * 接下来 m 行，每行包含两个整数 u 和 v，表示点 u 和点 v 之间存在一条边。
 * <p>
 * 输出格式
 * 如果给定图是二分图，则输出 Yes，否则输出 No。
 * <p>
 * 数据范围
 * 1≤n,m≤105
 * 输入样例：
 * 4 4
 * 1 3
 * 1 4
 * 2 3
 * 2 4
 * 输出样例：
 * Yes
 */
public class StainingMethod_860 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        BipartiteGraph bipartiteGraph = new BipartiteGraph(n, m);
        while (m-- != 0) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            bipartiteGraph.add(a, b);
            bipartiteGraph.add(b, a);
        }
        if (bipartiteGraph.color()) System.out.println("Yes");
        else System.out.println("No");
    }
}

// 二分图  <=> 当且仅当图中不存在奇数环
class BipartiteGraph {
    public static final int N = 100010, M = 200010;
    int n, m, idx;
    int[] h = new int[N];
    int[] e = new int[M];
    int[] ne = new int[M];
    int[] color = new int[M]; // 0 1

    public BipartiteGraph(int n, int m) {
        this.n = n;
        this.m = m;
        Arrays.fill(h, -1);
        Arrays.fill(color,-1);
    }

    void add(int a, int b) {
        e[idx] = b;
        ne[idx] = h[a];
        h[a] = idx++;
    }

    // 染色
    boolean color() {
        for (int i = 1; i <= n; i++) {
            // 如果未染色
            if (color[i] == -1) {
                if (!dfs(i, 1)) {
                    return false;
                }
            }
        }
        return true;
    }

    boolean dfs(int u, int c) {
        color[u] = c;
        for (int i = h[u]; i != -1; i = ne[i]) {
            int j = e[i];
            if (color[j] == -1) {
                if (!dfs(j, 1 - c)) // 判断j能否被染色
                    return false;
            } else if (color[j] == c) // 如果染过色了，不能染相同的颜色
                return false;
        }
        return true;
    }
}
